package backtype.storm.metric.api;

import backtype.storm.metric.api.IMetric;
import java.util.HashMap;
import java.util.Map;

public class MultiReducedMetric implements IMetric {
	Map<String, ReducedMetric> _value = new HashMap();
	IReducer _reducer;

	public MultiReducedMetric(IReducer reducer) {
		_reducer = reducer;
	}

	public ReducedMetric scope(String key) {
		ReducedMetric val = _value.get(key);
		if (val == null) {
			_value.put(key, val = new ReducedMetric(_reducer));
		}
		return val;
	}

	public Object getValueAndReset() {
		Map ret = new HashMap();
		for (Map.Entry<String, ReducedMetric> e : _value.entrySet()) {
			Object val = e.getValue().getValueAndReset();
			if (val != null) {
				ret.put(e.getKey(), val);
			}
		}
		return ret;
	}
}
